import axios from 'axios'
// 需要 导入 store 实例
import store from '@/store'
// 需要 导入 router 实例
import router from '@/router'
// 创建一个与axios本身用法一样的实例
const request = axios.create({
  // 基地址
  baseURL: 'http://www.liulongbin.top:3008'
})
// 添加请求拦截器
request.interceptors.request.use((config) => {
  // config就是此次请求的所有信息对象
  // 在config的headers对象中统一给后台携带token，这样接口函数中，
  // 就不用再去携带token了，在这里统一处理
  // 1. 获取token
  const { token } = store.state.user
  // 2. 携带token
  if (token) {
    config.headers.Authorization = token
  }
  return config
}, (error) => {
  // 对请求错误做些什么
  return Promise.reject(error)
})
// 添加响应拦截器
request.interceptors.response.use(response => {
  return response
}, error => {
  if (error.response.status === 401) {
    // 代码走到这里，说明token过期了
    // 1. 清空 vuex中 的token 和 userInfo
    store.commit('user/setToken', '')
    store.commit('user/setUserInfo', {})
    // 2. 跳转到登录页
    router.replace('/login')
  }
  return Promise.reject(error)
})

// 默认导出
export default request
